#闭包
# def func():
#     print('this is func')
#     def func1():
#         print('this is func1')
#func()
#直接指向func1会不通过，报错
#func1()

#作用域，func是妈妈，a是孩子，如果妈妈挂掉前没把孩子吐出来，那么妈妈挂了孩子也就挂了
# def func():
#     a=1
# func()
# #函数内的属性，都是有生命周期的，都是在函数执行期间
# print(a)

# 需求，我就想用func1,而且就必须是func1在func()内部
# def func():
#     print('this is func')
#     def func1():
#         print('this is func1')
#     #在func死掉之前吧func1吐出来
#     return func1
# # var=func()
# # #此时var=func1,var()相当于func1()
# # var()
# #装饰器的本质
# func()()


#需求：func1想用a
def func():
    a=1  #针对于func1来说，a是外部函数作用域里的变量
    print('this is func')
    def func1(num):
        print('this is func1')
        print(num+a)
    #在func死掉之前吧func1吐出来
    return func1
var=func()
#此时var=func1,var()相当于func1(),此时a没有销毁，而是存在了var(func1)中
var(3)
#什么时候销毁了var,或者var运行结束了，a才跟着被销毁
# del var
# print(a)